package cn.lyh.gulimall.product.controller;

import cn.lyh.gulimall.product.entity.PmsCategory;
import cn.lyh.gulimall.product.service.PmsCategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import utils.R;

import java.util.Arrays;
import java.util.List;

/**
 * @author lyh
 * @version 1.0
 * @since 2021/4/7
 */
@RestController
@RequestMapping("/product/category")
public class PmsCategoryController {

	@Autowired
	PmsCategoryService pmsCategoryService;

	/**
	 * 查出所有分类，组装成父子树形结构，并树形结构返回
	 *
	 * @return 查询的结果数据
	 */
	@RequestMapping("/list/tree")
	public R getList() {
		List<PmsCategory> list = pmsCategoryService.listWithTree();
		return R.ok().put("data", list);
	}

	/**
	 * 通过ID数组来进行数据的删除
	 *
	 * @param catIds 前端传入的ID数组
	 * @return 操作结果
	 */
	@PostMapping("/delete")
	public R delete(@RequestBody Long[] catIds) {
		// 1. 删除前要检查当前的菜单是否被其他的地方引用
		pmsCategoryService.removeMenuByIds(Arrays.asList(catIds));
		return R.ok();
	}

	/**
	 * 保存
	 *
	 * @param pmsCategory pmsCategory对象
	 * @return 操作结果
	 */
	@PostMapping("/save")
	public R save(@RequestBody PmsCategory pmsCategory) {
		pmsCategoryService.save(pmsCategory);
		return R.ok();
	}

	/**
	 * 修改三级菜单数据
	 *
	 * @param pmsCategory 实体类
	 * @return 操作结果
	 */
	@PostMapping("/update")
	public R update(@RequestBody PmsCategory pmsCategory) {
		pmsCategoryService.updateCascade(pmsCategory);
		return R.ok();
	}

	/**
	 * 通过ID查询单个菜单信息
	 *
	 * @param catId 菜单ID
	 * @return 单个最新数据
	 */
	@GetMapping("/info/{catId}")
	public R info(@PathVariable("catId") Long catId) {
		PmsCategory pmsCategory = pmsCategoryService.getById(catId);
		return R.ok().put("category", pmsCategory);
	}

	/**
	 * 批量修改三层菜单顺序及深度
	 *
	 * @param pmsCategories 前端传入的PmsCategory数组
	 * @return 操作结果
	 */
	@PostMapping("/update/sort")
	public R updateSort(@RequestBody PmsCategory[] pmsCategories) {
		pmsCategoryService.updateBatchById(Arrays.asList(pmsCategories));
		return R.ok();
	}



}